/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：AbstractPortModel.js<br>
 * 日期：2016年9月19日<br>
 * 作者: 王志远<br>
 * 功能：抽象端口模型<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 类型名称：Rainier.UI.V2.AbstractPortModel<br>
 * 类型功能：抽象端口模型<br>
 */
Rainier.UI.V2.AbstractPortModel = Rainier.UI.V2.AbstractModel.extend({
	
	NAME : "Rainier.UI.V2.AbstractPortModel",
	
	/**
	 * 函数名称：Rainier.UI.V2.AbstractPortModel.init<br>
	 * 函数功能：构造函数<br>
	 * 参数输入:property属性对象<br>
	 * 异常信息：无<br>
	 */
	init : function(property){
		var dummy = jQuery.extend(true,{},property);
		this._super(dummy);
		this.incomings = new draw2d.util.ArrayList();
		this.outgoings = new draw2d.util.ArrayList();
		if(dummy.portType){
			this.portType = dummy.portType;
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.AbstractPortModel.clone<br>
	 * 函数功能：对象拷贝<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：Rainier.UI.V2.AbstractPortModel<br>
	 * 异常信息：无<br>
	 */
	clone : function(){
		this._super();
		this.duplicate.portType = this.portType;
		return this.duplicate;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.AbstractPortModel.serializeToJson<br>
	 * 函数功能：将对象串行化为Json对象<br>
	 * 函数返回：json对象<br>
	 * 异常信息：无<br>
	 */
	serializeToJson : function(){
		var json = this._super();
		json.type 			= this.NAME;
		json.portType		= this.portType ? this.portType : '';
		return json;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.AbstractPortModel.getIncomings<br>
	 * 函数功能：获取所有入度连接<br>
	 * 函数返回：draw2d.util.ArrayList<br>
	 * 异常信息：无<br>
	 */
	getIncomings : function(){
		return this.incomings.clone();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.AbstractPortModel.getOutgoings<br>
	 * 函数功能：获取所有出度连接<br>
	 * 函数返回：draw2d.util.ArrayList<br>
	 * 异常信息：无<br>
	 */
	getOutgoings : function(){
		return this.outgoings.clone();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.AbstractPortModel.attachIncoming<br>
	 * 函数功能：关联进入的连接，同时向PortEditPart发送“model event attach incoming connection”事件<br>
	 * 参数输入：conn:Rainier.UI.V2.ConnectionModel<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	attachIncoming : function(conn){
		var event = Rainier.UI.V2.AbstractPortModel.MODEL_EVENT_ATTACH_INCOMING_CONNECTION;
		this.incomings.add(conn);
		this.firePropertyChange(
				event, 
				null, 
				conn
		);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.AbstractPortModel.detachIncoming<br>
	 * 函数功能：分离进入的连接，同时向PortEditPart发送“model event detach incoming connection”事件<br>
	 * 参数输入：conn:Rainier.UI.V2.ConnectionModel<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	detachIncoming : function(conn){
		this.incomings.remove(conn);
		var event = Rainier.UI.V2.AbstractPortModel.MODEL_EVENT_DETACH_INCOMING_CONNECTION;
		this.firePropertyChange(
				event, 
				null, 
				conn
		);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.AbstractPortModel.attachOutgoing<br>
	 * 函数功能：关联出度的连接，同时向PortEditPart发送“model event attach outgoing connection”事件<br>
	 * 参数输入：conn:Rainier.UI.V2.ConnectionModel<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	attachOutgoing : function(conn){
		var event = Rainier.UI.V2.AbstractPortModel.MODEL_EVENT_ATTACH_OUTGOING_CONNECTION;
		this.outgoings.add(conn);
		this.firePropertyChange(
				event, 
				null, 
				conn
		);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.AbstractPortModel.detachOutgoing<br>
	 * 函数功能：分离出度的连接，同时向PortEditPart发送“model event detach outgoing connection”事件<br>
	 * 参数输入：conn:Rainier.UI.V2.ConnectionModel<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	detachOutgoing : function(conn){
		var event = Rainier.UI.V2.AbstractPortModel.MODEL_EVENT_DETACH_OUTGOING_CONNECTION;
		this.outgoings.remove(conn);
		this.firePropertyChange(
				event, 
				null, 
				conn
		);
	},
});

Rainier.UI.V2.AbstractPortModel.MODEL_EVENT_ATTACH_INCOMING_CONNECTION = "model event attach incoming connection";	//关联入度连接事件
Rainier.UI.V2.AbstractPortModel.MODEL_EVENT_DETACH_INCOMING_CONNECTION = "model event detach incoming connection";	//分离入度连接事件
Rainier.UI.V2.AbstractPortModel.MODEL_EVENT_ATTACH_OUTGOING_CONNECTION = "model event attach outgoing connection";	//关联出度连接事件
Rainier.UI.V2.AbstractPortModel.MODEL_EVENT_DETACH_OUTGOING_CONNECTION = "model event detach outgoing connection";	//分离出度连接事件

